// type 对象 函数 数组 ....

// 1. 减轻 type的负担
// 2. 接口会将两个一样名字的接口合并成一个
// 3. extends : 继承 类 继承 父类 继承父类的属性
// 4. type 有的 interface没有的  interface 只能规范对象的类型 type类型多样化

// 使用规则 : 对象首选 interface

type StringOrNumber = string | number;
// type FnType = ()=>{};

const sOrN: StringOrNumber = 10;

interface ObjType0727 {
  title: string;
  age: number;
}
interface ObjType0727 {
  sex: boolean;
  abc: () => void;
}

// 公司 username  password age
// 财务部 money
// 研发部 code
// 人事部 hr
// 销售部 beer

interface Common0727 {
  username: string;
  password: string;
  age: number;
}
// 继承的关系
interface CaiWu extends Common0727 {
  money: number;
}

const obj0727: CaiWu = {
  username: "",
  password: "",
  age: 20,
  money: 2000000,
};

interface Common1 {
  username: string;
  password: string;
}

interface PickType extends Common1 {
  sex?: string;
  code?: number;
  money?: number;
}
let arr0727: PickType[] = [
  {
    username: "zhangsan",
    password: "123456",
  },
  {
    username: "zhangsan",
    password: "123456",
    sex: "男",
  },
  {
    username: "zhangsan",
    password: "123456",
    code: 10000,
  },
  {
    username: "zhangsan",
    password: "123456",
    money: 10000,
  },
];

interface Person0728 {
  // username : string;
  // sex ? : false;
  // num : string;  // -? : 可选-->必选
  // readonly uuid : string // 不能修改

  // 场景 属性值不确定 类型 string
  [key: string]: string; // 通用的接口类型的key (任何的key的名字 都行)
}

const person0728: Person0728 = {
  username: "zhangsan",
  num: "123",
  uuid: "123455",
  password: '1234',
};
person0728.password = "zhangsam";
// person0728.uuid = '123'
// console.log(person0728.uuid )

function a<T>(){

}

type Handle<T> = {

}